home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
Pakiet bezpieczenstwa
/
mini Pentoo LiveCD 2006.1
/
mpentoo-2006.1.iso
/
livecd.squashfs
/
etc
/
init.d
/
alsasound
< prev
next >
Wrap
Text File
|
2006-04-25
|
7KB
|
256 lines
#!/sbin/runscript
# $Header: /var/cvsroot/gentoo-x86/media-sound/alsa-utils/files/alsasound-1.0.10_rc2,v 1.2 2005/12/15 22:42:46 flameeyes Exp $
#
# Gentoo users: add this script to 'boot' run level.
# ==================================================
#
# alsasound This shell script takes care of starting and stopping
# the ALSA sound driver.
#
# This script requires /usr/sbin/alsactl and /usr/bin/aconnect programs
# from the alsa-utils package.
#
# Copyright (c) by Jaroslav Kysela <perex@suse.cz>
#
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# ChangeLog:
#
# 2003.07.29 - John Mylchreest <johnm@gentoo.org>
# Edited to support Linux kernel 2.5 and above as well as 2.4
#
# 2004.06.02 - Jeremy Huddleston <eradicator@gentoo.org>
# Rewritten for better support for built-in drivers
#
# 2004.10.29 - Jeremy Huddleston <eradicator@gentoo.org>
# Cleaned up to work better for mixed builtin/module systems
#
# 2004.11.29 - Jeremy Huddleston <eradicator@gentoo.org>
# Added save option thanks to Ben Anderson <roothorick@new.rr.com>
#
# 2005.04.21 - Jeremy Huddleston <eradicator@gentoo.org>
# Added restore option and oss option.
# Cleaned up code to use bash builtins instead of test.
alsactl=/usr/sbin/alsactl
asoundcfg=/etc/asound.state
aconnect=/usr/bin/aconnect
alsascrdir=/etc/alsa.d
opts="${opts} save restore"
depend() {
need bootmisc localmount
after modules isapnp coldplug hotplug
}
load_modules() {
# List of drivers for each card.
local DRIVERS="$(modprobe -c | grep -E "^[[:space:]]*alias[[:space:]]+snd-card-[[:digit:]]" | awk '{print $2}')"
# Fall back on the automated aliases if we don't have ALSA configured properly...
if [[ -z "${DRIVERS}" && ! ( -d /proc/asound && -z "$(grep ' no soundcards ' /proc/asound/cards)" ) ]] ; then
ewarn "Could not detect custom ALSA settings. Loading all detected alsa drivers."
DRIVERS="$(modprobe -c | grep pci: | awk '{ print $3 }' | grep snd.* | sort | uniq)"
[[ -z "${DRIVERS}" ]] && eerror "Unable to find any ALSA drivers. Have you compiled alsa-drivers correctly?"
fi
if [[ ${ENABLE_OSS_EMUL} == "yes" ]] && modprobe -c | grep -q "snd.*oss$" ; then
# Test for use of OSS
local OSS="$(modprobe -l | grep "snd.*oss" | sed -e "s:\/.*\/::" -e "s:\..*::")"
# Add oss modules to list
local i
for i in ${OSS}
do
DRIVERS="${DRIVERS} ${i}"
done
fi
# We want to ensure snd-seq is loaded as it is needed for things like
# timidity even if we don't use a real sequencer.
DRIVERS="${DRIVERS} $(modprobe -l | grep "snd.seq\." | sed -e "s:\/.*\/::" -e "s:\..*::")"
# We want to ensure snd-ioctl32 is loaded as it is needed for 32bit
# compatibility
DRIVERS="${DRIVERS} $(modprobe -l | grep "snd.ioctl32\." | sed -e "s:\/.*\/::" -e "s:\..*::")"
local DRIVER
for DRIVER in ${DRIVERS}
do
if [[ "${DRIVER}" != "off" &&
-z $(cut -d' ' -f1 /proc/modules | egrep "^${DRIVER}\$") &&
-z $(cut -d' ' -f1 /proc/modules | egrep "^${DRIVER//-/_}\$") ]] ; then
ebegin " Loading: ${DRIVER}"
/sbin/modprobe ${DRIVER}
eend $?
fi
done
sleep 1
if [[ -f /proc/asound/seq/drivers ]] ; then
local SEQUENCERS="$(awk -F, '$2~/^empty$/ {print $1}' /proc/asound/seq/drivers)"
local SEQUENCER
for SEQUENCER in ${SEQUENCERS}
do
if [[ -z $(cut -d' ' -f1 /proc/modules | egrep "^${SEQUENCER}\$") &&
-z $(cut -d' ' -f1 /proc/modules | egrep "^${SEQUENCER//-/_}\$") ]] ; then
ebegin " Loading: ${SEQUENCER}"
/sbin/modprobe ${SEQUENCER}
eend $?
fi
done
fi
for DRIVER in ${DRIVERS}
do
local TMP=${DRIVER##snd-}
TMP=${TMP##snd_}
if [[ -x "${alsascrdir}/${TMP}" ]] ; then
ebegin " Running: ${alsascrdir}/${TMP}"
${alsascrdir}/${TMP}
eend $?
fi
done
if [[ ! -d /proc/asound || -n "$(grep ' no soundcards ' /proc/asound/cards)" ]] ; then
eerror "ERROR: Failed to load necessary drivers"
fi
}
unload_modules() {
local LOADED_MODULES="$(/sbin/lsmod | grep -E "^snd" | awk '{print $1}')"
local MODULE
for MODULE in ${LOADED_MODULES}
do
/sbin/rmmod ${MODULE} >& /dev/null
done
/sbin/rmmod soundcore >& /dev/null
/sbin/rmmod gameport >& /dev/null
# Return success if the modules are unloaded
[[ -z "$(/sbin/lsmod | grep -E "^snd" | awk '{print $1}')" ]]
}
terminate() {
#
# Kill processes holding open sound devices
#
# DEVS=`find /dev/ -follow -type c -maxdepth 1 -print 2>/dev/null | xargs ls -dils | grep "1*1[46]," | cut -d: -f2 | cut -d" " -f2; echo /proc/asound/dev/*`
local ossdevs="/dev/admmidi? /dev/adsp? /dev/amidi? /dev/audio* /dev/dmfm* \
/dev/dmmidi? /dev/dsp* /dev/dspW* /dev/midi0? /dev/mixer? /dev/music \
/dev/patmgr? /dev/sequencer* /dev/sndstat"
local alsadevs="/proc/asound/dev/* /dev/sound/* /dev/snd/*"
fuser -k ${ossdevs} ${alsadevs} >& /dev/null
#
# remove all sequencer connections if any
#
[[ -f /proc/asound/seq/clients && -x ${aconnect} ]] && ${aconnect} --removeall
}
restore_mixer() {
if [[ ${RESTORE_ON_START} == "no" ]] ; then
return 0
fi
restore
}
restore() {
ebegin "Restoring Mixer Levels"
local val=0
if [[ ! -r ${asoundcfg} ]] ; then
ewarn "No mixer config in ${asoundcfg}, you have to unmute your card!"
elif [[ -x ${alsactl} ]] ; then
local CARDS="$(cat /proc/asound/cards | awk '/: / { print $1 }')"
local CARDNUM
for CARDNUM in ${CARDS}
do
[[ -e /dev/snd/controlC0 ]] || sleep 2
[[ -e /dev/snd/controlC0 ]] || sleep 2
[[ -e /dev/snd/controlC0 ]] || sleep 2
[[ -e /dev/snd/controlC0 ]] || sleep 2
${alsactl} -f ${asoundcfg} restore ${CARDNUM} || ewarn "Errors while restoring defaults, ignoring"
done
else
eerror -e "ERROR: Cannot find alsactl, did you forget to install media-sound/alsa-utils?"
val=1
fi
eend ${val}
return ${val}
}
save() {
ebegin "Storing ALSA Mixer Levels"
local val=0
if [[ -x ${alsactl} ]] ; then
${alsactl} -f ${asoundcfg} store
val=$?
else
eerror -e "ERROR: Cannot find alsactl."
val=1
fi
eend ${val}
return ${val}
}
start() {
if [[ -f /proc/modules ]] ; then
ebegin "Loading ALSA modules"
if load_modules ; then
eend 0
else
eend 1
return 1
fi
fi
if [[ ${RESTORE_ON_START} == "yes" ]]; then
restore_mixer
fi
}
stop() {
if [[ ! -d /proc/asound ]] ; then
eerror "ALSA is not loaded"
return 0
fi
if [[ ${SAVE_ON_STOP} == "yes" ]]; then
save
fi
ebegin "Unloading ALSA"
terminate
eend 0
if [[ -f /proc/modules ]]; then
ebegin "Unloading ALSA modules"
if unload_modules; then
eend 0
else
eend 1
fi
fi
}